package com.speedchina.framework.utils;

import org.apache.commons.lang3.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间工具类
 * @author HP
 */
public class DateUtils {


    private DateUtils() {

    }

    /**
     * 定义日期格式
     */
    public static final String DATE_TYPE_Y = "yyyy";
    public static final String DATE_TYPE_MM = "MM";
    public static final String DATE_TYPE_MM_DD = "MM-dd";
    public static final String DATE_TYPE_DD = "dd";
    public static final String DATE_TYPE_Y_D = "yyyy-MM-dd";
    public static final String DATE_TYPE_Y_M = "yyyy-MM";
    public static final String DATE_TYPE_Y_S = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_TYPE_Y_S2 = "yyyy/MM/dd HH:mm:ss";


    /**
     * @description
     *      按照DATE_TYPE格式来进行转换
     * @param []
     * @date 2020/5/27
     * @return java.lang.String
     * @throws
     **/
    public static final String formatDate(Object date) {
        if(null == date) {
            return null;
        } else {
            return formatDate(date, DATE_TYPE_Y_D);
        }
    }

    /**
     * @description
     *      按照指定格式日期来进行转换
     * @param []
     * @date 2020/5/27
     * @return java.lang.String
     * @throws
     **/
    public static final String formatDate(Object date, String formatType) {
        if(null == date) {
            return null;
        } else {
            if(StringUtils.isNotEmpty(formatType)) {
                // 说明最终需要根据客户所定义的格式来进行转换
                SimpleDateFormat format = new SimpleDateFormat(formatType);
                return format.format(date);
            } else {
                // 说明你没有给我转你自己的类型(这里千万不要直接return null--->容易抛出格式转换异常的错误)
                return formatDate(date);
            }
        }
    }

    public static Date parseDateString() {
        String dateString = formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = new Date();
        try {
            d = dt.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }


    /**
     * @description
     *      获取系统当前时间
     * @param []
     * @date 2020/5/27
     * @return java.lang.String
     * @throws
     **/
    public static final String getCurrentDate() {
        return formatDate(new Date());
    }

    /**
     * @description
     *      获取当年年度
     * @param []
     * @date 2020/5/27
     * @return java.lang.Integer
     * @throws
     **/
    public static Integer getCurrentYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 获取已经过去的日期 传入-2即前两天
     * @param oldNum formatType 时间格式化字符串
     * @return
     */
    public static String getOldDay(Integer oldNum, String formatType) {
        Date date=new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, oldNum);
        date = calendar.getTime();
        SimpleDateFormat format= new SimpleDateFormat(formatType);
        String dateString = format.format(date);
        return dateString;
    }
    /**
     * 获取已经过去的日期 传入-2即前两天
     * @param oldNum
     * @return
     */
    public static String getOldDay(Integer oldNum) {
        Date date=new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, oldNum);
        date = calendar.getTime();
        SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = format.format(date);
        return dateString;
    }

    /**
     * @Author
     * @Description 时间字符串转成时间
     * @Date 10:09 2021/2/4
     * @Param dateString ：时间字符串 dateType ：时间的格式化类型
     * @return
     */
    public static Date getDateByDataString(String dateString, String dateType) {
        if (!StringUtils.isNotEmpty(dateString)){
            return null;
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateType);
        try {
            Date date = simpleDateFormat.parse(dateString);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @Author
     * @Description 时间字符串转换成 毫秒数
     * @Date 10:04 2021/2/4
     * @Param [args]
     * @return void
     */
    public static Long date2Millisecond(Date date) {
        if (null == date) {
            return null;
        }
        return  date.getTime();
    }

}